package models

import (
	"html/template"
	"io"
	"log"

	"gitee.com/Yu-eng/Myproject/my-go-blog/config"
)

type TemplateBlog struct {
	*template.Template
}

type HtmlTemplate struct {
	//定义不同使用场景下所需要的template
	Index      TemplateBlog
	Category   TemplateBlog
	Custom     TemplateBlog
	Detail     TemplateBlog
	Login      TemplateBlog
	Pigeonhole TemplateBlog
	Writing    TemplateBlog
}

//将模板写入的操作进行封装
func (t *TemplateBlog) WriteData(w io.Writer, data interface{}) {
	err := t.Execute(w, data)
	if err != nil {
		w.Write([]byte(err.Error()))
		log.Println(err)
	}
}

//实际对Template 模板进行初始化
func InitTemplate() HtmlTemplate {

	//构建一个全新的模板
	t := template.New("index.html")
	//如何找到文件 找到当前路径
	path := config.Cfg.System.CurrentDir

	//访问博客首页模板的时候，因为有多个模板的嵌套，解析文件的时候，需要将涉及
	//到的所有模板都进行解析
	home := path + "/template/home.html"
	Header := path + "/template/layout/header.html"
	footer := path + "/template/layout/footer.html"
	personal := path + "/template/layout/personal.html"
	post := path + "/template/layout/post-list.html"
	pagination := path + "/template/layout/pagination.html"
	//这里添加了模板里面方法的映射 绑定了isODD函数
	t.Funcs(template.FuncMap{"isODD": isODD, "getNextName": getNextName, "date": Date})
	//解析文件
	t, err := t.ParseFiles(path+"/template/index.html", home, Header, footer, personal, post, pagination) //这里可以有多个文件,这里忽略了错误
	if err != nil {
		log.Panicln("解析模板出错！：", err)
	}
}
